import { defineStore } from 'pinia'
//选择式API
//引入接口
import { reqLogin,reqUserInfo } from "@/api/user"
//引入数据类型
import type { loginForm } from "@/api/user/type"
import type { userState } from './types/stype'
//引入操作本地存储的工具方法
import { SET_TOKEN, GET_TOKEN ,REMOVE_TOKEN} from '@/utils/token'
//引入常量路由
import { allRouters } from "@/router/test"
export const store = defineStore('shop', {
    //存储是数据的地方
    state: (): userState => ({
        token: GET_TOKEN(), //用户的唯一标识token
        menuRouters: allRouters,//仓库储存生成菜单需要数组（路由）
        netName: '', //网名
        headFace:'', //头像
    }),
    //异步或者逻辑的地方
    actions: {
        //用户登录的方法
        async userLogin(data: loginForm) { //其为异步，返回的是一个promise
            let res = await reqLogin(data);
            //登录成功：成功200->token
            //登录失败：失败201->错误信息
            if (res.code === 200) {
                //pinia存储token
                //由于pinia|vuex存储数据利用的是js对象
                this.token = (res.data.token as string)//此处用到断言，犹豫无法判断其类型，因此强制转化为string类型
                //本地存储使其持久化
                SET_TOKEN((res.data.token as string))
                //当前async函数请求成功的一个标志
                return "ok"
            } else {
                return Promise.reject(new Error(res.data.message))
            }
        },
        async userInfo(){
            let res = await reqUserInfo()
            //获取用户信息成功
            if(res.code==200){
                this.netName = res.data.checkUser.netName
                this.headFace = res.data.checkUser.headFace
                return Promise.resolve('获取信息成功')
            }else{
                return Promise.reject('获取信息失败')
            }
            
        },
        userOutLogin(){
            this.token="";
            this.netName='';
            this.headFace='';
            REMOVE_TOKEN()
            console.log(this.token)
        }

    },
    getters: {}
})
